package com.gjt.InternetAddress.Utils;

import java.net.InetAddress;
import java.net.UnknownHostException;

/**
 * Created with Intel IDEA.
 * 工具类 ： 监视垃圾邮件发送者，并通知客户端试图与之连接的主机是否是一个已知的垃圾邮件发送者
 *
 * @Auther: gjt
 * @Date: 2024/3/21 18:04
 */
public class SpamCheck {

    /**
     * 黑洞列表： 使用方法  如果你想sbl.spamhaus.org询问 152.136.138.218 是否为Spammer 就要查找主机名
     *      152.136.138.218.sbl.spamhaus.org(主机名的ascii字符串)
     *      如果查找失败说明不是spammer 否则是spammer
     */

    public static final String BLACKHOLE = "sbl.spamhaus.org";

    public static void main(String[] args) {
        for (String arg : args) {
            if(isSpammer(arg)){
                System.out.println(arg+"是 spammer");
            }else {
                System.out.println(arg+"不是 spammer");
            }
        }
    }


    private static boolean isSpammer(String arg){
        try{
            InetAddress address = InetAddress.getByName(arg);
            // 说明 返回的是无符号的整数，值大于127 Java会当作负数
            byte[] quad = address.getAddress();

            String query = BLACKHOLE;
            for (byte b : quad) {
                // 转换成正整数
                int unsignedByte = b < 0 ? b + 256 : b;
                query = unsignedByte + "." + query;
            }

            // 查到说明此地址在黑洞列表
            InetAddress.getByName(query);
            return true;
        }catch (UnknownHostException e){
            // 没有查到就会抛出异常说明不是spammer
           return false;
        }
    }
}
